package com.hxh.usermanagementsystem.config;

import com.hxh.usermanagementsystem.util.ConstVariable;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/7/7 1:12
 * 自定义用户拦截器
 */
@Component
@Slf4j
public class LoginIntercept implements HandlerInterceptor {

    /**
     * true 表示用户已经登录, 会继续访问目标方法
     * false 表示用户未登录, 跳转到登录界面
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        // 根据请求头区分安卓请求, 对安卓请求不作拦截处理
        String header = request.getHeader("User-Agent");
        if (StringUtils.hasLength(header)) {
            if (header.contains("Android")) {
                return true;
            }
        }
        // 处理其它请求
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute(ConstVariable.USER_SESSION_KEY) != null) {
            // 说明已经登录
            return true;
        }
        // 用户未登录, 跳转到登录界面
        response.sendRedirect("/login.html");
        return false;
    }
}
